//引入axios

import axios from "axios"
import { ElMessageBox } from 'element-plus'
import router from "@/router"
//配置axios

let http = axios.create({
    //基础地址
    baseURL: '/api',
    // 超时设置
    timeout: 1000 * 10,
    //是否携带凭据
    withCredentials: true
})

//配置拦截器

//请求拦截器,所有的axios请求都会被拦截器拦截,可以通过拦截器添加额外的配置

http.interceptors.request.use(config => {
    // console.log(config)
    //先获取token
    let token = sessionStorage.getItem('myx-token');
    config.headers.authorization = token
    return config
})

//响应拦截器,所有的axios响应都会被响应拦截器拦截,可以对拦截的响应进行额外的配置

http.interceptors.response.use(config => {
    //config是每个请求响应的结果,所有的请求返回的结果都需要经过这条门,才能到组件那
    // console.log('config====', config)
    if (config.data.state) {
        //响应正常
        return config
    } else {

        //不需要弹窗提示的路径  

        let excludePaths = ["/sms/send"];
        // console.log(config)

        //如果excludePaths中不包含当前的响应路径,那么不需要弹窗
        if (!excludePaths.includes(config.config.url)) {
            //响应了错误
            ElMessageBox.alert(config.data.msg, '错误提示', { type: 'error' })
        }

        //判断登入失效的情况 10022(登入状态过期) 1004(token失效了)前后端通俗约定状态码 并不是http状态码

        if (config.data.code == '10022' || config.data.code == '1004') {

            //退到登入页,然后清掉token
            sessionStorage.removeItem('myx-token')
            router.push('/login')
            //刷新页面,清掉缓存
            location.reload()
        }

        return Promise.reject(config.data.msg)
    }
})

export default http;